package com.blrs.system.service.impl;

import java.util.List;
import java.util.stream.Collectors;
import com.blrs.system.domain.SysDeptDictData;
import com.blrs.system.mapper.SysDeptDictDataMapper;
import com.blrs.system.service.ISysDictDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.blrs.common.core.domain.entity.SysDictData;
import com.blrs.common.utils.DictUtils;
import com.blrs.system.mapper.SysDictDataMapper;

/**
 * 字典 业务层处理
 *
 * @author ruoyi
 */
@Service
public class SysDictDataServiceImpl implements ISysDictDataService {
    @Autowired
    private SysDictDataMapper dictDataMapper;
    @Autowired
    private SysDeptDictDataMapper deptDictDataMapper;

    /**
     * 根据条件分页查询字典数据
     *
     * @param dictData 字典数据信息
     * @return 字典数据集合信息
     */
    @Override
    public List<SysDictData> selectDictDataList(SysDictData dictData) {
         if (dictData.getDeptIds().length == 0) {
            return dictDataMapper.selectDictDataList(dictData);
        } else if (dictData.getDeptIds().length == 1 && dictData.getDeptIds()[0] == 0) {
            return dictDataMapper.selectDictDataList(dictData);
        } else {
            return dictDataMapper.selectDictDataAndDept(dictData);
        }

    }

    /**
     * 根据字典类型和字典键值查询字典数据信息
     *
     * @param dictType  字典类型
     * @param dictValue 字典键值
     * @return 字典标签
     */
    @Override
    public String selectDictLabel(String dictType, String dictValue) {
        return dictDataMapper.selectDictLabel(dictType, dictValue);
    }

    /**
     * 根据字典数据ID查询信息
     *
     * @param dictCode 字典数据ID
     * @return 字典数据
     */
    @Override
    public SysDictData selectDictDataById(Long dictCode) {
        SysDeptDictData s = new SysDeptDictData();
        s.setDictCode(dictCode);
        List<SysDeptDictData> sysDeptDictData = deptDictDataMapper.selectSysDeptDictDataList(s);
        List<Long> deptIds = sysDeptDictData.stream().map(SysDeptDictData::getDeptId).collect(Collectors.toList());
        SysDictData sysDictData = dictDataMapper.selectDictDataById(dictCode);
        sysDictData.setDeptIds(deptIds.stream().toArray(Long[]::new));

        return sysDictData;
    }

    /**
     * 批量删除字典数据信息
     *
     * @param dictCodes 需要删除的字典数据ID
     */
    @Override
    public void deleteDictDataByIds(Long[] dictCodes) {
        SysDictData data =new SysDictData();
        for (Long dictCode : dictCodes) {
            data.setDictCode(dictCode);
            int row = dictDataMapper.deleteDictDataById(dictCode);
            if (row > 0) {
                List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
                DictUtils.setDictCache(data.getDictType(), dictDatas);
            }

        }
    }

    /**
     * 新增保存字典数据信息
     *
     * @param data 字典数据信息
     * @return 结果
     */
    @Override
    public int insertDictData(SysDictData data) {
        int row = dictDataMapper.insertDictData(data);
        if (row > 0) {
            insertAndUpdateDeptDictData(data.getDeptIds(), "insert", 0L);
            List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
            DictUtils.setDictCache(data.getDictType(), dictDatas);
        }
        return row;
    }

    /**
     * 修改保存字典数据信息
     *
     * @param data 字典数据信息
     * @return 结果
     */
    @Override
    public int updateDictData(SysDictData data) {
        int row = dictDataMapper.updateDictData(data);
        if (row > 0) {
            List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
            insertAndUpdateDeptDictData(data.getDeptIds(), "update", data.getDictCode());
            DictUtils.setDictCache(data.getDictType(), dictDatas);
        }
        return row;
    }

    public void insertAndUpdateDeptDictData(Long[] deptId, String status, Long dictCode) {
        if (status == "insert") {
            Long id = dictDataMapper.selectDictDataByOne();
            SysDeptDictData sysDeptDictData = new SysDeptDictData();
            if (deptId.length == 1 || deptId.length == 0) {
                sysDeptDictData.setDictCode(id);
                if (deptId.length == 0) {
                    sysDeptDictData.setDeptId(0L);
                } else {
                    sysDeptDictData.setDeptId(deptId[0]);
                }
                deptDictDataMapper.insertSysDeptDictData(sysDeptDictData);
            } else {
                sysDeptDictData.setDictCode(id);
                for (Long aLong : deptId) {
                    sysDeptDictData.setDeptId(aLong);
                    deptDictDataMapper.insertSysDeptDictData(sysDeptDictData);
                }
            }
        } else {
            SysDeptDictData sysDeptDictData = new SysDeptDictData();
            sysDeptDictData.setDictCode(dictCode);
            int i=0;
            if(deptId.length==1&&deptId[0]==0){
                //删除部门与数据字典关联
                deptDictDataMapper.deleteSysDeptDictDataById(dictCode,null);
                 i=1;
            }
            for (Long aLong : deptId) {
                sysDeptDictData.setDeptId(aLong);
                if(i!=1){
                    deptDictDataMapper.deleteSysDeptDictDataById(dictCode,0L);
                    deptDictDataMapper.deleteSysDeptDictDataById(dictCode,aLong);
                }
                deptDictDataMapper.insertSysDeptDictData(sysDeptDictData);
            }
        }
    }

    ;
}
